The present disclosure relates generally to the management of software performance testing, and more specifically, to managing software performance testing based on a distributed virtual machine (VM) system.
Software performance debugging is an important component of software quality control. The process of software debugging enables developers to find potential defects in software implementation or configuration, which can result in system improvements. Software debugging focuses on a series of diagnosis information for reflecting particular software running conditions (for example, the iterative calling sequence of multiple related functions of a complicated function). In order to enable a system under test to generate such diagnosis information, a series of instruments for generating the diagnosis information are embedded into the system under test before running the software, which can increase the program execution overhead.
With more and more powerful functions available, the scale of software products is becoming larger and larger. In general, instead of deploying on a physical machine, large-scale software is usually deployed on multiple physical nodes in a distributed manner. With the evolvement and popularization of VM techniques and cloud computing services, more and more distributed systems are established in distributed virtual environments. A distributed VM system is formed by a series of VM nodes that are widely distributed over physical resources of a network, which are isolated from each other safely and independently. Each VM encapsulates hardware and software resources required by the execution of user applications, and those VM nodes work cooperatively according to a particular relationship to construct a virtual execution environment for the accomplishment of user tasks. Running software in a distributed virtual environment, different function components are generally distributed on VMs on different physical machines. Mutual access or calling on a hierarchical structure may occur at run time, for example, an upper level subtask needs to invoke the execution result of a lower level subtask.